package _11_整理题目._8_多线程;

/**
 * 创建三个线程：
 *      main, th1, th2
 * 执行流程控制，按顺序执行：
 *      首先 main 打印 start
 *      然后 th1 打印 0~2
 *      然后 th2 打印 5~7
 *      最后 main 打印 over
 *
 * 思路：
 *      使用 join() 方法：等待调用 join() 的实例执行完才继续执行
 *      适合将大问题分解为小问题，让其他线程处理完，再继续执行
 *
 */
public class _01_等待其他线程执行完_ABA_1_ {
    public static void main(String[] args) throws Exception {
        System.out.println("start");

        Thread th1 = new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 3; i++) {
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    System.out.println(i);
                }
            }
        };
        th1.start();
        th1.join();

        Thread th2 = new Thread(() -> {
            for (int i = 5; i < 8; i++) {
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println(i);
            }
        });
        th2.start();
        th2.join();

        System.out.println("over");
    }
}
